/**
 * 删除有序数组中的重复项
 * https://leetcode.cn/problems/remove-duplicates-from-sorted-array
 */

/**
 * 双指针
 * 相等的元素在数组中的下标一定是连续的
 * nums长度为0，则不包含任何元素，返回0
 * nums长度为1，则包含1个元素，返回1
 * 从下标1开始删除重复元素
 * 定义两个指针，快指针fast，慢指针slow
 * 快指针表示遍历数组到达的下标位置，慢指针表示下一个不同元素要填入的下标位置
 * 初始值两个指针都指向第二个元素，即下标为1的元素
 * 时间复杂度：O(n)
 * 空间复杂度：O(1)
 */
const removeDuplicates = function(nums) {
    if (nums.length === 0) return 0;
    let slow = 1; // 慢指针初始化为1，即下标为1的元素
    for (let fast = 1; fast < nums.length; fast++) { // 快指针也初始化为1，即下标为1的元素
        if (nums[fast] !== nums[fast - 1]) { // 说明nums[fast]与之前的元素都不通
            nums[slow] = nums[fast]; // 将nums[fast]赋值给nums[slow]
            slow++; // slow指针向后移动
        }
    }
    return slow; // 返回slow的值，就是数组中不重复的元素的个数
}